package com.wei.czz.framework.common.service;

import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.common.limitConfig.LimitConfigFormVo;
import com.wei.czz.framework.common.entity.LimitConfigEntity;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2023-02-16 21:38:02
 * className: LimitConfigService 限流请求服务接口
 * version: 1.0
 * description:
 */
public interface LimitConfigService {

    /**
     * 保存限流配置操作
     * @param limitConfig 限流配置对象
     */
    void saveOrEdit(LimitConfigEntity limitConfig);

    /**
     * 分页获取限流配置操作
     * @param limitConfigFormVo 限流配置参数对象
     * @return 限流配置分页数据
     */
    PageDto<LimitConfigEntity> getPageList(LimitConfigFormVo limitConfigFormVo);

    /**
     * 获取可用限流配置列表
     * @return 可用限流配置列表
     */
    List<LimitConfigEntity> queryUsableLimitConfigList();

    /**
     * 获取限流配置操作
     * @param id 主键
     * @return 限流配置对象
     */
    LimitConfigEntity get(Long id);

    /**
     * 获取限流配置操作
     * @param idList 主键列表
     * @return 限流配置对象列表
     */
    List<LimitConfigEntity> getList(List<Long> idList);

    /**
     * 获取限流配置操作
     * 根据接口路径和限流类型匹配数据
     * @param requestKeyList 接口路径
     * @param type 限流类型
     * @return 限流配置对象列表
     */
    List<LimitConfigEntity> findList(List<String> requestKeyList, Integer type);

    /**
     * 修改限流配置操作
     * 使用乐观锁进行判断
     * @param limitConfig 限流配置对象
     * @return 修改数据条数
     */
    int optimisticUpdate(LimitConfigEntity limitConfig);

    /**
     * 批量修改限流配置操作
     * 使用乐观锁进行判断
     * @param limitConfigList 限流配置对象列表
     * @return 修改成功限流配置对象列表
     */
    List<LimitConfigEntity> optimisticBatchUpdate(List<LimitConfigEntity> limitConfigList);

    /**
     * 删除限流配置操作
     * @param idList 主键列表
     */
    void delete(List<Long> idList);
}

